import { App, createVNode, VNode, render } from 'vue'
import Loading from './loading.vue'

// 自定义插件
export default {
    install(app: App) {
        // 真实 Dom 转 vNode
        const vNode: VNode = createVNode(Loading)
        // 挂载
        render(vNode, document.body)
        // Vue 提供的全局配置 可以自定义
        app.config.globalProperties.$selfLoading = {
            show: () => vNode.component?.exposed?.show(),
            hide: () => vNode.component?.exposed?.hide(),
        }
    }
}


// 源码：aoo.use(Xxx)  Xxx为插件
// import type { App } from 'vue'
// import { app } from './main'

// interface Use {
//     install: (app: App, ...options: any[]) => void
// }

// const installedList = new Set()

// export function MyUse<T extends Use>(plugin: T, ...options: any[]) {
//     if (installedList.has(plugin)) {
//         return console.warn('重复添加插件', plugin)
//     } else {
//         plugin.install(app, ...options)
//         installedList.add(plugin)
//     }
// }